home *** CD-ROM | disk | FTP | other *** search
/ Risc World 3 / Risc World 3.iso / SOFTWARE / ISSUE2 / PD / VINCE / !ViNCe / c / vncauth < prev    next >
Text File  |  2002-03-10  |  2KB  |  87 lines

  1. /*
  2.  *  Copyright (C) 1999 AT&T Laboratories Cambridge.  All Rights Reserved.
  3.  *
  4.  *  This is free software; you can redistribute it and/or modify
  5.  *  it under the terms of the GNU General Public License as published by
  6.  *  the Free Software Foundation; either version 2 of the License, or
  7.  *  (at your option) any later version.
  8.  *
  9.  *  This software is distributed in the hope that it will be useful,
  10.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  *  GNU General Public License for more details.
  13.  *
  14.  *  You should have received a copy of the GNU General Public License
  15.  *  along with this program; if not, write to the Free Software
  16.  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
  17.  *  USA.
  18.  */
  19.  
  20. /*
  21.  * vncauth.c - Functions for VNC password management and authentication.
  22.  */
  23.  
  24. #include <stdio.h>
  25. #include <stdlib.h>
  26. #include <string.h>
  27. #include <time.h>
  28. #include "vncauth.h"
  29. #include "d3des.h"
  30.  
  31.  
  32. /*
  33.  * We use a fixed key to store passwords, since we assume that our local
  34.  * file system is secure but nonetheless don't want to store passwords
  35.  * as plaintext.
  36.  */
  37.  
  38. unsigned char fixedkey[8] = {23,82,107,6,35,78,88,7};
  39.  
  40.  
  41.  
  42.  
  43. /*
  44.  * Generate CHALLENGESIZE random bytes for use in challenge-response
  45.  * authentication.
  46.  */
  47.  
  48. void
  49. vncRandomBytes(unsigned char *bytes)
  50. {
  51.     int i;
  52.     unsigned int seed = (unsigned int) clock();
  53.  
  54.     srand(seed);
  55.     for (i = 0; i < CHALLENGESIZE; i++) {
  56.     bytes[i] = (unsigned char)(rand() & 255);
  57.     }
  58. }
  59.  
  60.  
  61. /*
  62.  * Encrypt CHALLENGESIZE bytes in memory using a password.
  63.  */
  64.  
  65. void
  66. vncEncryptBytes(unsigned char *bytes, char *passwd)
  67. {
  68.     unsigned char key[8];
  69.     int i;
  70.  
  71.     /* key is simply password padded with nulls */
  72.  
  73.     for (i = 0; i < 8; i++) {
  74.     if (i < strlen(passwd)) {
  75.         key[i] = passwd[i];
  76.     } else {
  77.         key[i] = 0;
  78.     }
  79.     }
  80.  
  81.     deskey(key, EN0);
  82.  
  83.     for (i = 0; i < CHALLENGESIZE; i += 8) {
  84.     des(bytes+i, bytes+i);
  85.     }
  86. }
  87.